home *** CD-ROM | disk | FTP | other *** search
/ Black Crawling Systems Archive Release 1.0 / Black Crawling Systems Archive Release 1.0 (L0pht Heavy Industries, Inc.)(1997).ISO / blackcrwl / releases / cops-rl.txt < prev    next >
Text File  |  1992-01-10  |  24KB  |  477 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.                   *  R e n e g a d e   L e g i o n  *
  11.  
  12.  
  13.                            RL C.O.P.S. File
  14.  
  15.  
  16.                                   by
  17.  
  18.                             Brian Oblivion
  19.  
  20.                           Technical Report #7
  21.  
  22.                                May 1991
  23.  
  24.  
  25.  
  26. The Night Elite BBS     (RL HeadQuarters) : (617) oOo-oOOo
  27. The Electric Eye ][     (RL Support Site) : (313) 776-8928
  28. Mind Of 'a Lunatic      (RL Support Site) : (714) 693-0957
  29. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  30.  
  31.  
  32.  
  33.    Well, due to the increasing popularity of this package of utilities, I
  34. feel that everyone should be aware of it, watch for it, and avoid it.
  35. Looking at the file one will say, by Jove! how easy it would be to modify
  36. this program to report to me all the flaws of a system.  And so it should
  37. be done.  At any rate, absorb the information.
  38.  
  39.  
  40.    The package, which will be henceforth be referred to as COPS
  41. (Computer Oracle and Password System), can be broken down into three
  42. key parts.  The first is the actual set of programs that attempt
  43. to automate security checks that are often performed manually (or
  44. perhaps with self written short shell scripts or programs) by a systems
  45. administrator.  The second part is the documentation, which details
  46. how to set up, operate, and to interpret any results given by the
  47. programs.  Finally, COPS is an evolving beast.  It includes a list
  48. of possible extensions that might appear in future releases, as well
  49. as pointers to other works in UNIX security that could not be included
  50. at this time, due to space or other restrictions.
  51.  
  52.    This document contains six sections:
  53.  
  54.       1) What is COPS?
  55.       2) What COPS is _not_
  56.       3) How to Configure COPS
  57.       4) Running COPS for the 1st Time
  58.       5) Continued Use and Installing COPS
  59.       6) Disclaimer and End Notes
  60.  
  61.  
  62. 1) What is COPS?
  63. -----------------
  64.  
  65.    COPS is a collection of about a dozen (actually, a few more, but
  66. a dozen is such a good sounding number) programs that each attempt
  67. to tackle a different problem area of UNIX security.  Here is what it
  68. currently checks:
  69.  
  70. o  file, directory, and device permissions/modes.
  71.  
  72. o  poor passwords.
  73.  
  74. o  content, format, and security of password and group files.
  75.  
  76. o  the programs and files run in /etc/rc* and cron(tab) files.
  77.  
  78. o  finds SUID files, and checks for their writeability and if they are
  79.    shell scripts.
  80.  
  81. o  runs a crc check against important binaries or key files, and reports
  82.    any changes therein.
  83.  
  84. o  writability of users home directories and startup files (.profile,
  85.    .cshrc, etc.)
  86.  
  87. o  anonymous ftp setup.
  88.  
  89. o  unrestricted tftp, decode alias in sendmail, SUID uudecode problems.
  90.  
  91. o  miscellaneous root checks -- current directory in the search path,
  92.    a "+" in /etc/host.equiv, unrestricted NFS mounts, ensures root is
  93.    in /etc/ftpusers, etc.
  94.  
  95. o  includes the Kuang expert system, that takes a set of rules and tries
  96.    to determine if your system can be compromised (for a more complete list
  97.    of all of the checks, look at the file "release.notes" or "cops.report";
  98.    for more on Kuang, look at at "kuang.man".)
  99.  
  100.    All of the programs merely warn the user of a potential problem --
  101. COPS DOES NOT ATTEMPT TO CORRECT OR EXPLOIT ANY OF THE POTENTIAL PROBLEMS
  102. IT FINDS!  COPS either mails or creates a file (user selectable) of any
  103. of the problems it finds while running on your system.  And because COPS
  104. does not correct potential hazards it finds, it does _not_ have to be
  105. run by a privileged account (i.e. root or whomever.)  The only security
  106. check that should be run by root to get maximum results is the SUID checker;
  107. although it can be run as an unprivileged user, to find all the SUID files
  108. in a system, it should be run as root (in addition, if key binaries are
  109. not world readable, only executable, the CRC checking program ("crc.chk")
  110. needs to be run as a privileged user to read the file in question to get
  111. the result.)  In addition, COPS cannot used to probe a host remotely; all
  112. the tests and checks made require a shell that is on the site being tested.
  113.  
  114.    The programs are mostly written in Bourne shell (using awk, sed, grep,
  115. etc. as well) for (hopefully) maximum portability.  A few are written
  116. in C for speed (most notably the Kuang expert system and for implementing
  117. fast user home directory searching), but the entire system should run on
  118. most BSD and System V machines with a minimum of tweaking.
  119.  
  120. 2) What COPS is _not_
  121. ----------------------
  122.  
  123.    COPS merely provides a method of checking for common procedural errors.
  124. It is not meant to be used as a replacement for common sense or user/
  125. operator/administrative alertness!  Think of it as an aid, a first line
  126. of defense -- not as an impenetrable shield against security woes.  An
  127. experienced wrong-doer could easily circumnavigate _any_ protection that
  128. COPS can give.  However, COPS _can_ aid a system in protecting its users
  129. from (their own?) ignorance, carelessness, and the occasional malcontent
  130. user.
  131.  
  132.    Once again, COPS does not correct any errors found.  There are several
  133. reasons for this; first and foremost, computer security is a slippery
  134. beast.  What is a major breach in security at one site may be a standard
  135. policy of openness at another site.  Additionally, in order to correct all
  136. problems it finds, it would have to be run as a privileged user; and I'm
  137. not going to go into the myriad problems of running SUID shell scripts
  138. (See the bibliography at the end of the technical report "cops.report"
  139. for pointer to a good paper on this subject by Matt Bishop.)
  140.  
  141.    At this time, COPS does not attempt to detect bugs or features (such
  142. as the infamous ftpd, fingerd, etc) that may cause security problems.  Although
  143. this may change in future versions, the current line of reasoning to avoid
  144. general publication of programs such as these is that all the problems that
  145. COPS detects can be repaired on any system it runs on.  However, many bugs
  146. can be readily repaired only be having source code (and possibly a good
  147. vendor to repair it), and many sites would have serious troubles if they
  148. suddenly discovered unrepairable problems that could compromise their
  149. livelihood.  It is possible that a more controlled release may come out
  150. in the future to address such problems (but don't mail to me about getting
  151. them -- unless you want to help write them! :-))
  152.  
  153. 3) How to Configure COPS
  154. -------------------------
  155.  
  156.   System V users, other Non-BSD systems, or sites with commands in
  157. strange places -- you may have to run a shell script called "reconfig"
  158. to change the pathnames of the executable programs called when using
  159. COPS.  If your system does not use the paths listed in the shell
  160. scripts, try running "reconfig".  This will reconfigure the pathnames
  161. used by COPS to your system; COPS should run fine then, if it
  162. can find all of the commands (reconfig should tell you if it
  163. cannot.)  If trouble persists, you will have to change the paths
  164. to your executable files (awk, sed, etc) by hand.  A drag, I know.
  165. This all may change without notice, anyway :-)
  166.  
  167.   With all the varieties of unix, there are a few types that may need
  168. extra help to run the system.  I've got README files for Apollo and Xenix
  169. in the distribution -- see the files "README.apollo", and "README.xenix",
  170. respectively -- if you have any troubles, drop me a line, and I'll
  171. see what I can do about working out a patch with you.  Some problems
  172. might arise with some SYSV machines (heck, to any machine :-)), due to
  173. weird files and names for stuff.  What can I say?  Portability is a
  174. problem.  You can comment out line 39 and 38 in "misc.chk", if you use
  175. /etc/servers instead of /etc/inetd.conf.
  176.  
  177. 4) Running COPS for the 1st Time
  178. ---------------------------------
  179.  
  180.    Since most of COPS was written and tested mostly on just a few machines
  181. (at least compared to the total number out there!), you may have significant
  182. differences that were not anticipated -- unfortunately, or fortunately,
  183. UNIX is not quite standardized yet.  However, I haven't run into a UNIX
  184. yet that I haven't been able to get it running on, with just a small amount
  185. of change, so feel free to mail to me for help.
  186.  
  187.    COPS is run by simply typing "cops".  "cops" is a Bourne shell script
  188. that runs each of the programs, accumulates the output, and then either 
  189. mails or stores any results in a file.  "suid.chk" (and possibly "crc.chk")
  190. is the only package that is meant to be run separately, simply because it
  191. can take a long time to run, and possibly because it needs a privileged
  192. account to run it; look at "suid.man" for more information.  By all means,
  193. however, do not ignore the SUID checker!  Run it at least once a week, if
  194. possible, more (daily?); intruders into a system often leave SUID files
  195. to gain privileges later.  "crc.chk" should also be run; it can either
  196. be run as a standalone program (preferred), or as part of the COPS package;
  197. read the file "CRC.README", and the man page for more information.
  198.  
  199.    To run COPS for the first time, I suggest doing the following:
  200.  
  201.    -- Look at the disclaimer, file "disclaimer".  Don't sue me.
  202.       Actually, this holds for all the times you use COPS (1/4 :-))
  203.  
  204.    -- Type "make" and "make docs" to create the formatted manual pages,
  205.       to compile the C programs,  and to make the shell programs executable.
  206.       A couple of potential (hopefully minor problems) might occur, probably
  207.       only for SysV based machines; one, if you don't have the "-ms" package
  208.       for nroff (i.e. you, get an error message after typing "make" about
  209.       it), just remove the "-ms" flag; e.g., change line 7 of the
  210.       "docs/makefile" file, from:
  211.  
  212.       ROFFLAGS   = -ms
  213.         to
  214.       ROFFLAGS   =
  215.  
  216.       The second potential problem might be with the password checking
  217.       program; if it fails to compile, try uncommenting out line 20 in
  218.       "makefile" -- e.g., enable the "BRAINDEADFLAGS = -lcrypt" flag.
  219.       If this doesn't work... well, you can either work it out, or e-mail me.
  220.  
  221.    -- Read the technical report to understand what COPS is doing and
  222.       what is going on -- "cops.report".  This gives a look at the
  223.       philosophies, design notes, and finally a general outlay of the
  224.       COPS system and UNIX security.  This can be forsaken, for those
  225.       who just want to get to the results/see some action (people like
  226.       me.)
  227.  
  228.    -- Next, change lines 51 and 52 in the "cops" shell file; this is
  229.       what they were:
  230.  
  231.         SECURE=/usr/foo/bar
  232.         SECURE_USERS="foo@bar.edu"
  233.  
  234.       SECURE should be the same directory as the directory that contains
  235.       the cops programs, and SECURE_USERS should be your own login id, or
  236.       to whomever you designate as the recipient of the output (your enemy?)
  237.  
  238.    -- Set "MMAIL=NO" in the "cops" shell file (line 25).  This will prevent
  239.       a large mail file from choking the mailer.  All of the output will be
  240.       put into a file called "year_month_day" (obviously, that's like:
  241.       "1991_Dec_31", not actually the words, "year_month_day" :-)), and
  242.       should be automatically placed by COPS in a directory that has the
  243.       same name as the host it was run on (e.g., your own hostname.)
  244.  
  245.    -- Look at the directory and file configuration file, "is_able.lst"
  246.       This contains critical files that COPS checks for group and world
  247.       writability and readability.  Add or delete whatever files/directories
  248.       you wish; if a file doesn't exist, COPS will effectively ignore it.
  249.       (If you don't know or are uncertain what files/directories are
  250.       important, what is given there is a good set to start with on most
  251.       systems.)
  252.  
  253.    -- If you allow anonymous ftp access to your system, add a "-a" flag
  254.       to "ftp.chk" on line 104 of "cops".  Right now, it is set up so
  255.       that key files and directories are expected to be owned by root;
  256.       however, it has provisions for two owners, $primary and $secondary --
  257.       some may wish to change the second to "ftp", or some other user.
  258.       Read the man page for ftp.chk, or look at "ftp.chk" for further notes.
  259.  
  260.    -- You may wish to comment out the password checker (line 109 in the
  261.       "cops" shell file).  Although this is not necessary, it will speed
  262.       up the package if you wish for immediate gratification.
  263.       If you are using yellow pages/NIS, read "README.yp" for tips on how
  264.       to check passwords there.
  265.  
  266.    -- Uncomment out the crc checker, "crc.chk" (line 123), if you desire to
  267.       run it as part of the normal COPS run.
  268.  
  269.   You should be ready to roll.  COPS is run by simply typing "cops" (you
  270. may wish to put in the background....)  If you followed my advice and
  271. set "MAIL=NO" in the "cops" shell file, after COPS is finished, there
  272. will be a report file created ("year_month_day") that lists the time and
  273. machine it was created on.  Otherwise, COPS mails the report to the user
  274. listed on the line 'SECURE_USERS="foo@bar.edu"'.  There is a file
  275. "warnings", which contains most of the warning messages COPS uses, as well
  276. as a brief explanation of how the message might pertain to your system and
  277. finally a suggestion as how to "fix" any problem.
  278.  
  279.    NOTE: Change the shell script "cops" to reflect who you want the output
  280. sent to and where the location of the program is BEFORE running the program.
  281.  
  282.  
  283. 5) Continued Use and Installing COPS
  284. -------------------------------------
  285.  
  286.    Once you are satisfied that COPS indeed does something useful
  287. (hopefully this will occur :-)), a good way to use it is to run it
  288. on at least a semi-regular basis.  Even if it doesn't find any problems
  289. immediately, the types of problems and holes it can detect are of the
  290. sort that can pop up at any given time.  One way of running COPS
  291. might be to run it as an "at" job or by cron.
  292.  
  293.    I highly advise that whatever directory COPS is placed in is to be
  294. readable, writable, and executable only by the owner (typing 
  295. "chmod 700 /usr/foo/bar" or whatever the name is will do this) of the
  296. directory.  This is to prevent prying eyes from seeing any security
  297. problems your site may have.  Even if you don't think of them as
  298. important, someone else might come around and change your mind.  Since
  299. COPS is fairly configurable, an intruder could easily change the paths
  300. and files that COPS checks for, hence making it fairly worthless.  Again,
  301. this comes back to the point that COPS is only a tool -- don't put down
  302. your defensive shields merely because COPS says "all clear".  If this
  303. sounds paranoid, it is!  Security people are traditionally paranoid,
  304. for a reason....  In any case, it is probably not a good idea to advertise
  305. any (even) potential weaknesses.
  306.  
  307.    Typing "make install" will create (if necessary) a subdirectory with
  308. the name you put in $INSTALL_DIR (found on line 7 of "makefile"); if you
  309. run a network with multiple architectures, you can have several executable
  310. versions of COPS in the same NFS mounted directory structure.  You can run
  311. COPS with "cops archtype", and it will cd into the archtype directory, use
  312. the binaries in that directory (placed there by a "make install"), and put
  313. any results in a subdirectory of the archtype directory with the appropriate
  314. host name.
  315.  
  316.    For example, assume you have the following setup:
  317.  
  318. machine architecture    hostname    If run COPS with:
  319. =====================   ========    ==================
  320. cray                    ribcage     cops
  321. vax                     bar         cops vax
  322. vax                     foo         cops vax
  323. sun                     earth       cops sun
  324. sun                     mars        cops sun
  325. sun                     venus       cops sun
  326. mips                    hades       cops
  327.  
  328.   If $SECURE (the secure directory variable in the "cops" shell script) was
  329. set to "/usr/secure", the resulting directory/reporting structure would be:
  330.  
  331. /usr/secure/cops/ribcage
  332. /usr/secure/cops/vax/bar
  333. /usr/secure/cops/vax/foo
  334. /usr/secure/cops/sun/earth
  335. /usr/secure/cops/sun/mars
  336. /usr/secure/cops/sun/venus
  337. /usr/secure/cops/hades
  338.  
  339.   Sometimes you will get the same report over and over again, everytime you
  340. run COPS; for instance, with Ultrix 3.x, /dev/kmem is world readable -- this
  341. is a security hole, but many utilities in Ultrix need this to function.  If
  342. you wish to only see reports that are _different_ than the old reports, you
  343. first need to have an older report saved in a file (in $SECURE/hostname, or
  344. wherever you usually save the reports); you can then set "MMAIL=YES" _and_
  345. "ONLY_DIFF=YES" (lines 25 & 30, respectively) in "cops"; everytime COPS is
  346. run after that, it will compare the report it generated for the current
  347. check with the old report; if it detects any differences, it will mail you
  348. a report.  If not, it simply discards it.  This can be a real boon for a
  349. site with a lot of machines running COPS every night...
  350.  
  351.    There are a couple of further options you may wish to explore.  First
  352. of all, since so many breakins are because of poor passwords selection
  353. by users, it would be a wise idea to add options to your password checking
  354. program (line 109 in "cops").  You may wish to try some words from a
  355. dictionary; you may use either your system dictionary (usually found in
  356. /usr/dict/words), or you may use the same dictionary that the internet
  357. worm found so lucrative when hitting all those thousands of hosts; that
  358. dictionary is in the file "pass.words" (example; the way to include the
  359. worm dictionary is: "pass.chk -w pass.words").  Also, try some of the options
  360. in the password program, such as "-b", "-g", "-s", and "-c", which add
  361. checks for backward, gecos, single letter & number, and upper and lower
  362. case guesses, respectively.  Just as a note, each option will increase the
  363. time needed to crack the passwords, of course; experiment!  See what is
  364. reasonable for your hardware and resource capabilities.
  365.  
  366.    By using the "pass_diff.chk" program, you only check accounts that have
  367. _changed_ their password since the last time you've checked -- this can
  368. save enormous amounts of times with large systems; you can check your users
  369. thoroughly once, then only check them as they change their passwords again.
  370. Be careful, though, if you use this, and then later expand your checks
  371. and/or your dictionary used to search for passwords, the earlier accounts
  372. that were already checked with an inferior method will not be checked again
  373. until they change their password.  See the file "passwords" in the
  374. "extensions" directory for a replacement "passwd" program, that can disallow
  375. poor passwords to begin with.
  376.  
  377.    The file "is_able.lst" contains a list of files that are to be checked
  378. for world readability and/or writability; look at the file; add or delete
  379. any files you feel are important to your system.
  380.  
  381.    After running COPS, if any warnings are given that compromise any
  382. individual users accounts (such as world writable .profiles, home
  383. directories, guessed passwords, etc.), and the warnings are not corrected
  384. immediately (or you are not sure whether or not it is worth hassling
  385. the user to change it), try this:
  386.  
  387.    Edit the file "init_kuang", and add the compromised user(s) uids and
  388. groups in their respective target lines (below lines 20 and 27,
  389. respectively), and run kuang again to see if the users can compromise
  390. the entire system.  You may change your mind about not thinking
  391. they are a problem!  In addition, kuang does not have to have "root" 
  392. as a target (the last line).  Try putting in system administrators or
  393. other powerful figures to see if they are in danger as well.  If you
  394. have "perl" installed on your system, try the perl version of kuang --
  395. "kuang.pl" (you'll have to unpack the shar file this is inside --
  396. "kuang.pl.shar", and you may have to edit the first line of the file
  397. "kuang.pl", to reflect where the location that perl is on your system.)
  398.  
  399. 6) Disclaimer and End Notes
  400. ----------------------------
  401.  
  402.    COPS is meant to be a tool to aid in the tightening of security, not
  403. as a weapon to be used by an enemy to find security flaws in a system.
  404. It may be argued that allowing anyone to have access to such a tool may
  405. be dangerous.  But hopefully the overall benefit for systems that use
  406. this package will outweigh any negative impact.  To me it is akin to a
  407. law enforcement problem -- that although telling the public how to break
  408. into a house may foster a slight rise in break-in attempts, the overall
  409. rise in public awareness on how to defend themselves would actually result
  410. in a drop in break-ins.  The crackers with black hats already know how
  411. to crush system defenses and have similar tools, I'm sure.  It's time
  412. we fought back.
  413.  
  414.   COPS is not the final answer to anyone's security woes.  You can use
  415. the system as long as you realize that COPS has no warranty, implied
  416. or otherwise, and that any problems that you may have with it are
  417. not my or any of the other authors' fault.  I will certainly attempt to
  418. help you solve them, if I am able.  If you have ideas for additional
  419. programs, or a better implementation of any of the programs here, I would
  420. be very interested in seeing them.  COPS was the work of a LOT of people,
  421. both in writing code and in the testing phase (thanks beta testers!).  For
  422. a complete list of contributors, look at the file "XTRA_CREDIT".
  423.  
  424.    So good luck, and I hope you find COPS useful as we plunge into UNIX
  425. of the 1990's.
  426.  
  427.    dan farmer
  428.    January 31, 1989
  429.    (Now January 31, 1990)
  430.  
  431.  
  432. # include "./disclaimer"
  433.  
  434.   Just for snix, here are some of the machine/OS's I know this sucker works
  435. on; far and away the most common problem was getting that stupid password
  436. cracking program to compile, followed by systems without the -ms package to
  437. nroff.  Some minor problems with config files -- I *think* these are all
  438. ok:
  439.  
  440.  
  441. DECstation 2100, 3100, 5000, Ultrix 2.x, 3.x, 4.x
  442. (It should, I'm sitting in front of one now.  Ultrix is braindead)
  443.  
  444. Sun 3's, 4's (incl. Solbourne) -- 3.x, 4.x
  445. Gould 9080 Powernode, hacked up Gould OS (whatever it is)
  446. sequent S-87 symmetry, dynix V3.0.12 (both att & bsd universes; att required
  447.                        "BRAINDEADFLAGS = -lcrypt" to be uncommented.
  448. eta-10P, Sys V R3 based
  449. Convex boxes, all types, most OS's (up to 9.x, the most recent)
  450. Apollo dn3000 & dsp90, Domain SR 9.7
  451. Vax 11/780, 4.3 BSD (Mt. Xinu, tahoe and stock)
  452. Vaxstation, MicroVax, Vax 6320 & 8800, Ultrix 2.0, 3.x
  453. HP900/370, HP-UX 6.5
  454. Cray 2 & Y-MP, UNICOS 5.0, 6.0
  455. Amdahl 5880, UTS 580-1.2.3
  456. SGI 2500's, IRIX GL 3.6
  457. SGI 4D's, IRIX System V Release 3.X
  458. '286 & '386 Boxes, running Xenix (README.xenix)
  459.  
  460. Apple Mac IIci, running AUX 2.x.  The "test -z" seemed broken on this, but I
  461. only had a brief chance to test it out, but kuang didn't like it as a result.
  462. I'll get a working version soon; everything seemed ok (change the /etc/servers
  463. line in "misc.chk".)
  464.  
  465. NeXT, 1.x
  466. (password stuff is different on this machine, tho; cracking is strange.  Diffs?)
  467.  
  468. Multimax 320, 12 Processors, 64Mb Memory, Encore Mach Version B1.0c (Beta)
  469. (no crypt(3) on this machine.  Sigh.)
  470.  
  471. IBM rs6000, AIX 3.1 (BRAINDEAD -- boo.  hiss.)
  472. COPS will *NOT* work well on this piece of trash -- the shell utilities are
  473. garbage; however, you can still get *some* useful info.  I'm not going to
  474. rewrite everything because big-blue won't write an awk that works:
  475.  
  476.  
  477.